/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Applet;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Administrador
 */
public class HiloPeticiones implements Runnable {

    private Socket cliente;

    public Socket getCliente() {
        return cliente;
    }

    public void setCliente(Socket cliente) {
        this.cliente = cliente;
    }
    private byte[] mensajeCifrado;

    public HiloPeticiones(Socket cliente, byte[] mensajeCifradoLlegada) {
        this.cliente = cliente;
        this.mensajeCifrado = mensajeCifradoLlegada;
    }

    public void run() {

        ObjectInputStream entrada = null;
        ObjectOutputStream salida = null;

        //byte[] menajeDecifrado = new byte[mensajeCifrado.length];

        byte[] menajeDecifrado = new byte[]{54,52,39,57,58,38,117,57,58,50,60,59};

        Vector<byte[]> matrizDecifrada = new Vector();

        matrizDecifrada = decifrar(menajeDecifrado); // Ojo con parametros

        MatrizResultado MatDecifrada = new MatrizResultado(matrizDecifrada);

        try {

            // establecer flujo de salida para los objetos
            salida = new ObjectOutputStream(cliente.getOutputStream());
            salida.writeObject(MatDecifrada); // Envio la matriz analizada
            salida.flush(); // vacíar búfer de salida para enviar información de encabezado

            // establecer flujo de entrada para los objetos
            entrada = new ObjectInputStream(cliente.getInputStream());


            System.out.println("Envio la cosa");

        } catch (IOException ex) {
            Logger.getLogger(HiloPeticiones.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

    public Vector<byte[]> decifrar(byte[] mensajeCifrado) {

        System.out.println("Imprime proceso, dentro del HIlo");

        
        Vector<byte[]> vectorDecifrado = new Vector();
        Integer contador = 0;

        for (Integer i = 0; i < 128; i++) {

            byte[] mensajeDecifrado = new byte[mensajeCifrado.length];

            for (Integer j = 0; j < mensajeCifrado.length; j++) {

                mensajeDecifrado[j] = (byte) (mensajeCifrado[j] ^ i);
                String value = new String(mensajeDecifrado);
                System.out.println("Posición Col: " + j + "\tPos Fila: " + i + "  " + mensajeDecifrado[j] + "\t Letra:" + value);
            }

            System.out.println("Campos: "+mensajeDecifrado.length);
            vectorDecifrado.add(contador, mensajeDecifrado);
            contador++;
        }

        //Verifiación de vector :)
        System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx");
        for (int i = 0; i < vectorDecifrado.size(); i++) {

            //Debemos hacer esta igualación para poder hacer el rrecorrido de cada arreglo
            byte[] aux = vectorDecifrado.elementAt(i);

            for (int j = 0; j < aux.length; j++) {
                System.out.println("Fila: " + i + "  Byte: " + j + "\t" + aux[j]);
            }


        }
        return vectorDecifrado;
    }
}
